package com.xjscrm.console.service.customer.wwCustomer;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xjscrm.common.entity.CorpApplication;
import com.xjscrm.common.entity.WwCustomer;
import com.xjscrm.console.chat.frame.recv.RPullCustomerMsg;
import com.xjscrm.console.param.BaseDto;
import com.xjscrm.console.param.wwCustomer.*;

import javax.servlet.http.HttpServletResponse;

public interface WwCustomerService {

    Object newTotalCustomerNumber(CustomerCountDto customerCountDto);

    Object countCustomerScene(CustomerCountDto customerCountDto);

    Object countCustomerGender(CustomerCountDto customerCountDto);

    Object getCustomerTagTree(CustomerTagQuery customerTagDto);


    Long addCustomerPersonTag(CustomerTagDto customerTagDto);

    Object getCustomer(CustomerQuery customerQuery);

    Object getSceneDropDwon(BaseDto baseDto);

    Object getGenderDropDwon(BaseDto baseDto);

    Object getCustomerDetail(CustomerDto customerDto);

    void updateCustomer(CustomerDto customerDto);

    void batchUpdateCustomerRemake(BatchUpdateCustomerRemakeDto batchUpdateCustomerRemakeDto);

    void batchAddCustomerTag(BatchCustomerTagDto batchAddCustomerTagDto);

    void batchDeleCustomerTag(BatchCustomerTagDto batchCustomerTagDto);


    void addTags(TagDto tagDto);

    void batchMoveCustomerTag(BatchCustomerTagDto batchCustomerTagDto);

    void addCustomerToTags(AddCustomerToTagsDto addCustomerToTagsDto);


    void deleCustomerPersonTAgs(DeleCustomerPersonTAgsDto deleCustomerPersonTAgsDto);

    void updateCustomerPersonTAgs(CustomerTagDto customerTagDto);

    void batchDeleCustomer(BatchDeleCustomerDto batchDeleCustomerDto);


    Object getCustomerSelectPage(GetCustomerSelectPageQuery customerSelectPageQuery);


    void syncCustomerTag(SyncCustomerTagDto syncCustomerTagDto);

    void syncCustomerTagV1(SyncCustomerTagV1Dto syncCustomerTagDto, CorpApplication corpApplication);


    Page<WwCustomer> pageFromChat(Long merId, RPullCustomerMsg content);

    void syncCustomer(SyncCustomerDto syncCustomerDto);

    void syncPersonTag(SyncPersonTagDto syncCustomerDto);

    void exportCustomerTags(CustomerQuery customerQuery, HttpServletResponse response);

    WwCustomer getByWxId(Long merId, Long deviceUniqueId, String wxId);

    Object getWwGroup(GetWwGroupQuery getWwGroupQuery);

    void insert(WwCustomer customer);

    void batchSyncCustomer(BatchSyncCustomerDto batchSyncCustomerDto);

    Object getSyncCustomerList(SyncCustomerQuery syncCustomerQuery);

    void delSyncCustomer(DelSyncCustomerDto delSyncCustomerDto);

    void excuteSyncCustomer(BaseDto baseDto);

    void batchSyncPersonTag(BatchSyncPersonDto batchSyncPersonDto);

    Object getBatchSyncPersonTagList(BatchSyncPersonTagQuery batchSyncPersonTagQuery);

    void delSyncPersonTag(DelSyncPersonTagDto delSyncPersonTagDto);

    void excuteSyncPersonTag(BaseDto baseDto);

    void syncToRemote(Long merId, Long id, CorpApplication corpApplication);
}
